import { createStore } from 'vuex'
import cache from '@/common/cache-mu'
import router from '@/router';
import { notification,message as Message } from 'ant-design-vue';
import muajax from '@/common/axios-core-mu';


export default createStore({
	/**
	 * mapState({}||[]) 可使放入computed里使用
	 * @returns
	 */
	state() {
		// 待开发  如果登陆时使用保持登陆则cache 不保持则cache.se
		let user = (cache('form.keep')||false)?cache('user',null,'_vuex'):cache.se('user',null,'_vuex');
		let state = {
			user:user||{},
			count: 0
		}
		if(!user?.token){
			console.log('未登录，自动跳转登录');
			setTimeout(()=>{
				router.push('/login');
			},50)
			
		}
		return state
	},
	getters: {
		/**
		 * mapGetters({}||[])
		 * @param {*} state   state对象
		 * @param {*} getters 所有的getters 可以继续使用其他getters的方法
		 * @returns value  使用是不需要加括号（） 类似computed方法  可使放入computed里使用
		 * 对于子模块的state 接收根节点为第三个参数rootState
		 */
		getse: (state,getters,rootState, rootGetters) => {
			return state.count+'次'
		},
		// 可以传参的gets
		gets2:state=>id=>'传参：'+id+'次 count:'+(id+state.count)
	},
	mutations: {
		/**
		 * mapMutations({}||[])
		 * 更改 Vuex 的 store 中的状态的唯一方法是提交mutation 只能以同步方式运行 调用示例：$store.commit('increment', params) 示例2 $store.commit({type:'increment',...parms})
		 * @param {*} state
		 * @param {*} params 接收的传参
		 */
		increment (state,params) {
			state.count++
		},
		/**
		 * 保存用户登陆信息
		 * @param {*} state
		 * @param {*} user
		 */
		saveUser(state,user){
			console.log('mu',user)
			if(user){
				state.user=user;
				(cache('form.keep')||false)?cache('user',user,'_vuex'):cache.se('user',user,'_vuex')
			}else{
				state.user={};
				(cache('form.keep')||false)?cache.clean('user','_vuex'):cache.se.clean('user','_vuex');
				router.push('/login');
				setTimeout(()=>{
					notification.success({
						message: '辛苦了',
						description: `已为您安全退出程序。`
					})
				},500);
			}
			// for(k in user){
			// 	state.user[k]=user[k];
			// }
		},
		setuserpsd(state){
			let user =state.user;
			user.hasetpwd=1;
			(cache('form.keep')||false)?cache('user',user,'_vuex'):cache.se('user',user,'_vuex')
		},//设置用户已修改密码
	},
	actions: {
		/**
		 * mapActions({}||[]) action可异步执行
		 * 通过$store.dispatch('increment')触发  调用示例：$store.dispatch('increment', params) 示例2 $store.dispatch({type:'increment',...parms})
		 * @param {*} context  与 vue.$store 实例具有相同方法和属性的 context 对象但不是 $store 实例本身
		 * 对于子模块的state 根节点为context.rootState
		 */
		increment (context,params) {
			context.commit('increment')
		},
		async saveUser(store,params){
			console.log('actions',params)
			if(!params){
				Message.loading({ content: 'Loading...', key:'loginout' });

				store.commit('saveUser',params);
				Message.success({ content: '成功注销登陆', key:'loginout', duration: 2 });
				
				return;
			}
			store.commit('saveUser',params);
			// 此处请求退出
		},
		setuserpsd(store){
			store.commit('setuserpsd');
		},
	},
	modules: {
		foo:{
			// namespaced: true,//开启命名空间
			actions:{
				someAction: {
					// root: true,//注册为全局action
					handler (namespacedContext, payload) { } // -> 'someAction'
				}
			}
		}
	}
})
